package algo3.g203.modelo.naves;

import algo3.g203.modelo.armas.Arma;
import algo3.g203.modelo.armas.ArmaConvencional;
import algo3.g203.modelo.armas.MinaPorContacto;
import algo3.g203.modelo.armas.MinaSubmarina;
import algo3.g203.modelo.armas.explosiones.Fragmento;
import algo3.g203.modelo.fisica.Direccion;
import algo3.g203.modelo.fisica.Posicion;
import algo3.g203.modelo.naves.secciones.SeccionEstandar;
import algo3.g203.modelo.naves.secciones.SeccionTemplate;

public class Buque extends Nave {

	private final int TAMANIO_LANCHA = 4;
	private boolean estaDestruida;
	
	public Buque(Posicion posicion, Direccion direccion) {
		super(posicion, direccion);
		this.estaDestruida = false;
	}
	
	@Override
	public int getTamanioNave() {
		return this.TAMANIO_LANCHA;
	}

	@Override
	public SeccionTemplate crearSeccionEspecifica(Posicion p) {
		return new SeccionEstandar(p);
	}
	
	@Override
	public void recibirDisparo(ArmaConvencional a) {
		this.respuestaADisaro(a);
	}

	@Override
	public void recibirDisparo(MinaSubmarina m) {
		this.respuestaADisaro(m);
	}
	
	@Override
	public void recibirDisparo(MinaPorContacto m) {
		this.respuestaADisaro(m);
	}
	
	@Override
	public boolean estaDestruida() {
		return this.estaDestruida;
	}
	
	private void respuestaADisaro(Arma a) {
		for (Fragmento f : a.performExplosion())
			for (SeccionTemplate s: listaSecciones)
				if(s.recibirDanioDe(f)) {
					this.estaDestruida = true;
					break;
				}	
	}
}
